/*!
 * \file CtaStraContext.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief CTA策略上下文头文件
 * 
 * 本文件定义了CTA策略上下文类，作为CTA策略与引擎之间的桥梁。
 * 继承自CtaStraBaseCtx基础上下文类，提供策略生命周期管理和事件回调功能。
 * 负责将引擎的各种事件（如行情更新、K线闭合、交易时段变化等）转发给具体的CTA策略实例。
 */
#pragma once
#include "CtaStraBaseCtx.h"

#include "../Includes/WTSDataDef.hpp"

NS_WTP_BEGIN
class WtCtaEngine;
NS_WTP_END

USING_NS_WTP;

class CtaStrategy;

/**
 * @class CtaStraContext
 * @brief CTA策略上下文类
 * 
 * CTA策略上下文类，继承自CtaStraBaseCtx，作为CTA策略与CTA引擎之间的桥梁。
 * 
 * 主要功能包括：
 * - 管理CTA策略实例的生命周期
 * - 处理引擎事件并转发给策略
 * - 提供策略初始化、交易时段管理等功能
 * - 处理行情数据更新和K线数据闭合事件
 * - 支持定时调度和计算任务
 * 
 * @note 每个CTA策略实例都对应一个CtaStraContext上下文
 * @see CtaStraBaseCtx, CtaStrategy, WtCtaEngine
 */
class CtaStraContext : public CtaStraBaseCtx
{
public:
	/**
	 * @brief 构造函数
	 * 
	 * 创建CTA策略上下文实例
	 * 
	 * @param engine CTA引擎指针
	 * @param name 策略名称
	 */
	CtaStraContext(WtCtaEngine* engine, const char* name);
	
	/**
	 * @brief 析构函数
	 * 
	 * 清理资源
	 */
	virtual ~CtaStraContext();

	/**
	 * @brief 设置策略实例
	 * 
	 * 将CTA策略实例绑定到当前上下文
	 * 
	 * @param stra CTA策略实例指针
	 */
	void set_strategy(CtaStrategy* stra){ _strategy = stra; }
	
	/**
	 * @brief 获取策略实例
	 * 
	 * 获取当前上下文绑定的CTA策略实例
	 * 
	 * @return CTA策略实例指针
	 */
	CtaStrategy* get_stragety() { return _strategy; }

public:
	/**
	 * @brief 策略初始化回调
	 * 
	 * 当策略需要初始化时被调用，转发给具体的策略实例
	 */
	virtual void on_init() override;
	
	/**
	 * @brief 交易时段开始回调
	 * 
	 * 当交易时段开始时被调用，转发给具体的策略实例
	 * 
	 * @param uTDate 交易日期（格式：YYYYMMDD）
	 */
	virtual void on_session_begin(uint32_t uTDate) override;
	
	/**
	 * @brief 交易时段结束回调
	 * 
	 * 当交易时段结束时被调用，转发给具体的策略实例
	 * 
	 * @param uTDate 交易日期（格式：YYYYMMDD）
	 */
	virtual void on_session_end(uint32_t uTDate) override;
	
	/**
	 * @brief Tick数据更新回调
	 * 
	 * 当订阅的合约有新的Tick数据时被调用，转发给具体的策略实例
	 * 
	 * @param stdCode 标准合约代码
	 * @param newTick 新的Tick数据
	 */
	virtual void on_tick_updated(const char* stdCode, WTSTickData* newTick) override;
	
	/**
	 * @brief K线闭合回调
	 * 
	 * 当订阅的K线周期闭合时被调用，转发给具体的策略实例
	 * 
	 * @param stdCode 标准合约代码
	 * @param period K线周期（如"m1", "m5", "d1"等）
	 * @param newBar 新闭合的K线数据
	 */
	virtual void on_bar_close(const char* stdCode, const char* period, WTSBarStruct* newBar) override;
	
	/**
	 * @brief 定时计算回调
	 * 
	 * 定时调度时被调用，用于策略的定时计算和处理，转发给具体的策略实例
	 * 
	 * @param curDate 当前日期（格式：YYYYMMDD）
	 * @param curTime 当前时间（格式：HHMM或HHMMSS）
	 */
	virtual void on_calculate(uint32_t curDate, uint32_t curTime) override;

private:
	CtaStrategy*		_strategy;	/**< CTA策略实例指针 */
};


